package com.shenfa.dao.systemManager.function;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;

import com.ibatis.sqlmap.client.SqlMapClient;
import com.shenfa.bean.Function;
import com.shenfa.bean.TreeNode;

/**
 * 功能数据库操作类
 * 
 * @author yanglong
 *
 */
public class FunctionDao {

	@Autowired
	private SqlMapClient sqlMapClient;
	
	/**
	 * 添加功能
	 * @param func	功能对象
	 * @return	1成功，0失败
	 */
	public int add(Function func) {
		try{
			sqlMapClient.insert("function_manager.add", func);
			return 1;
		}catch(Exception e){
			e.printStackTrace();
			return 0;
		}
	}

	/**
	 * 更新功能
	 * @param func	功能对象
	 * @return	1成功，0失败
	 */
	public int upd(Function func) {
		try {
			sqlMapClient.update("function_manager.upd", func);
			return 1;
		} catch (SQLException e) {
			e.printStackTrace();
			return 0;
		}
	}

	/**
	 * 删除功能
	 * @param func	功能对象
	 * @return	1成功，0失败
	 */
	public int del(Function func) {
		try {
			sqlMapClient.delete("function_manager.del", func);
			return 1;
		} catch (SQLException e) {
			e.printStackTrace();
			return 0;
		}
	}

	/**
	 * 根据对象条件查询功能列表
	 * @param func	功能对象
	 * @return	功能列表
	 */
	@SuppressWarnings("unchecked")
	public List<Function> getList(Function func,int start,int limit) {
		List<Function> list = new ArrayList<Function>();
		try{
			list = sqlMapClient.queryForList("function_manager.getList", func,start,limit);
		}catch(Exception e){
			e.printStackTrace();
		}
		return list;
	}

	public int queryCount(Function func)
	{
		List<Function> list = new ArrayList<Function>();
		try{
			list = sqlMapClient.queryForList("function_manager.getList", func);
		}catch(Exception e){
			e.printStackTrace();
		}
		return list.size();
	}
	
	/**
	 * 根据角色ID查询功能列表
	 * @param roleId	角色ID
	 * @return	功能列表
	 */
	@SuppressWarnings("unchecked")
	public List<String> getFunctionIdByRoleId(String roleId) {
		List<String> list = new ArrayList<String>();
		try{
			list = sqlMapClient.queryForList("function_role_manager.getFuncByRoleId",roleId);
		}catch(Exception e){
			e.printStackTrace();
		}
		return list;
	}
	/**
	 * 获取功能
	 * @param id
	 * @return
	 */
	public Function get(String id) {
		Function func = new Function();
		try {
			func = (Function) sqlMapClient.queryForObject("function_manager.get", id);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return func;
	}

	/**
	 * 获取功能
	 * @param id
	 * @return
	 */
	public List<Function> getbylist(List<String> list) {
		List<Function> func=null;
		try {
			if(list.size()==0){
				return func;
			}
			func =sqlMapClient.queryForList("function_manager.getbylist",list);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return func;
	}
	
	/**
	 * 根据父节点查询所有功能树
	 * @param node	父节点ID
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<TreeNode> getTree(String value) {
		List<TreeNode> list = new ArrayList<TreeNode>();
		try {
			list = sqlMapClient.queryForList("function_manager.getListByPid",value);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return list;
	}

	/**
	 * 根据父节点查询所有功能列表
	 * @param parent	父节点ID
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<Function> getListByParent(Function parent) {
		List<Function> list = new ArrayList<Function>();
		try {
			list = sqlMapClient.queryForList("function_manager.getAllListByParent",parent);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return list;
	}
	/**
	 * 删除属于角色的功能菜单
	 * @param role
	 * @return
	 */
	public int delFuncByRoleId(String rid){
		try {
			return sqlMapClient.delete("function_role_manager.delFuncByRoleId",rid);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return -1;
	}
	
	/**
	 *增加角色的功能菜单
	 * @param map
	 */
	public void addFuncByRoleId(Map<String,String> map){
		try {
			sqlMapClient.insert("function_role_manager.addFuncByRoleId",map);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
